package com.ruoyi.result.patents.domain.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.system.domain.result_entity.Author;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

import java.util.Date;
import java.util.List;

/**
 * 专利信息VO对象
 *
 * @author ruoyi
 * @date 2025-01-14
 */
@Data
public class ResultPatentsVO extends BaseEntity {
    private static final long serialVersionUID = 1L;

    @ApiModelProperty("角色id")
    private Long roleId;

    @ApiModelProperty("角色名称")
    private String roleName;

    @ApiModelProperty("部门id")
    private Long deptId;

    @ApiModelProperty("部门名称")
    private String deptName;

    @ApiModelProperty("用户昵称")
    private String nickName;

    /** 主键，自动递增的专利ID */
    private Long id;

    /** 专利名称 */
    @Excel(name = "专利名称")
    private String title;  // 与数据库字段保持一致

    /** 专利类型 */
    @Excel(name = "专利类型")
    private String patentType;

    /** 专利状态 */
    @Excel(name = "专利状态")
    private String patentStatus;

    /** 专利编号 */
    @Excel(name = "专利编号")
    private String patentNumber;

    /** 专利权人 */
    @Excel(name = "专利权人")
    private String patentOwner;

    /** 授权公告日 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "授权公告日", width = 30, dateFormat = "yyyy-MM-dd")
    private Date authorizationDate;  // 与数据库字段保持一致

    /** 申请编号 */
    @Excel(name = "申请编号")
    private String applicationNumber;

    /** 专利申请日 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "专利申请日", width = 30, dateFormat = "yyyy-MM-dd")
    private Date applicationDate;  // 与数据库字段保持一致

    /** 本人排名 */
    @Excel(name = "本人排名")
    private Integer authorRank;  // 数据库是int类型，这里用Integer更合适

    /** 备注信息 */
    @Excel(name = "备注信息")
    private String remarks;

    /** 关联课题 */
    @Excel(name = "关联课题")
    private Integer projectId;  // 数据库是int类型，这里用Integer更合适

    /** 作者信息 */
    @Excel(name = "作者信息")
    private List<Author> authorInfo;

    /** 成果同步 */
    @Excel(name = "成果同步")
    private String syncStatus;

    /** 创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date createdAt;  // 与数据库字段保持一致

    /** 更新时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date updatedAt;  // 与数据库字段保持一致

    /** PDF路径 */
    @Excel(name = "PDF路径")
    private String pdfUrl;  // 与数据库字段保持一致

    /** 创建人ID */
    @Excel(name = "创建人ID")
    private Long userId;  // 与数据库字段保持一致

    /** 软删除标识(0未删除，1已删除) */
    private Integer isDeleted;

    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                .append("id", getId())
                .append("title", getTitle())
                .append("patentType", getPatentType())
                .append("patentStatus", getPatentStatus())
                .append("patentNumber", getPatentNumber())
                .append("patentOwner", getPatentOwner())
                .append("authorizationDate", getAuthorizationDate())
                .append("applicationNumber", getApplicationNumber())
                .append("applicationDate", getApplicationDate())
                .append("authorRank", getAuthorRank())
                .append("remarks", getRemarks())
                .append("projectId", getProjectId())
                .append("authorInfo", getAuthorInfo())
                .append("syncStatus", getSyncStatus())
                .append("createdAt", getCreatedAt())
                .append("updatedAt", getUpdatedAt())
                .append("pdfUrl", getPdfUrl())
                .append("userId", getUserId())
                .append("isDeleted", getIsDeleted())
                .append("deptId", getDeptId())
                .append("deptName", getDeptName())
                .append("nickName", getNickName())
                .toString();
    }
}

